const express = require('express')
const wifi = require('node-wifi')
const app = express()
const path = require('path')
const si = require('systeminformation')
const cors = require('cors')

// 配置CORS中间件，允许所有来源的请求
app.use(cors({
  origin: '*', // 允许所有来源
  methods: ['GET', 'POST', 'PUT', 'DELETE'], // 允许的HTTP方法
  allowedHeaders: ['Content-Type', 'Authorization'] // 允许的请求头
}))

// 打印当前文件路径
console.log(`当前运行的文件: ${path.resolve(__filename)}`)

// 初始化wifi模块
wifi.init({
  iface: null // 使用默认网卡
})

// 添加错误处理中间件
app.use((err, req, res, next) => {
  console.error('发生错误:', err)
  res.status(500).json({
    success: false,
    message: '服务器内部错误',
    error: err.message
  })
})

app.get('/api/getWifiList', (req, res) => {
  console.log('开始扫描WiFi网络...')
  wifi.scan((error, networks) => {
    if (error) {
      console.error('WiFi扫描错误:', error)
      let troubleshootingTips = []
      
      // 分析错误类型，提供针对性的故障排除建议
      if (error.code === 1 && error.cmd.includes('netsh')) {
        troubleshootingTips = [
          '1. 检查您的无线网卡是否已启用',
          '2. 确保您有管理员权限运行此命令',
          '3. 启用位置服务: 按 Windows 徽标键 + R，输入 ms-settings:privacy-location 并按 Enter，然后开启位置服务',
          '4. 尝试更新无线网卡驱动程序',
          '5. 在命令提示符中手动运行: netsh wlan show networks mode=Bssid 检查是否可以正常工作',
          '6. 如果是笔记本电脑，请确保无线开关已打开'
        ]
      }
      
      res.json({
        success: false,
        message: error.message,
        errorDetails: error,
        troubleshootingTips: troubleshootingTips
      })
    } else {
      console.log(`发现 ${networks.length} 个WiFi网络`)
      // 过滤出有用的信息返回给前端
      const wifiList = networks.map(network => ({
        ssid: network.ssid,
        bssid: network.bssid,
        signal: network.signal_level, // 信号强度
        channel: network.channel
      }))
      res.json({
        code: 200,
        message: "请求成功",
        data: {
            records: wifiList,
            total: networks.length
        }
      })
    }
  })
})

// 获取系统信息的API端点
app.get('/api/getSystemInfo', async (req, res) => {
  try {
    console.log('开始获取系统信息...')
    
    // 获取各类系统信息
    const systemInfo = {
      // 系统基本信息
      system: await si.system(),
      
      // CPU信息
      cpu: await si.cpu(),
      
      // 内存信息
      memory: await si.mem(),
      
      // 磁盘信息
      diskLayout: await si.diskLayout(),
      
      // 网络信息
      networkInterfaces: await si.networkInterfaces(),
      
      // 电池信息(如果有)
      battery: await si.battery()
    }
    
    console.log('系统信息获取成功', systemInfo)
    res.json({
      code: 200,
      message: "请求成功",
      data: systemInfo
    })
  } catch (error) {
    console.error('获取系统信息错误:', error)
    res.status(500).json({
      code: 500,
      message: '获取系统信息失败',
      error: error.message
    })
  }
})

app.listen(3000, () => {
  console.log('服务器运行在3000端口')
  console.log('可用API:')
  console.log('1. 获取WiFi列表: http://localhost:3000/api/getWifiList')
  console.log('2. 获取系统信息: http://localhost:3000/api/getSystemInfo')
})